/**
 * Created by zhuyongjie on 2018/1/8.
 * 适用于台账合并行合并列的jquery小插件扩展
 * 用法$(input).rowspan(2)
 * $(input).colspan(4)
 * 其中input为td单元格中的直属元素
 */
(function ($) {
    $.fn.extend({
        /**
         * 合并行
         * @param rowspan 需合并行数
         */
        'rowspan' : function (rowspan) {

        //当前td在行中的序号
        var columnIndex = $(this).parent('td,th').index();
        if(rowspan > 0){
            //循环当前行后的行次，过滤只显示可视行
            $(this).parent('td,th').parent('tr').nextAll('tr').filter(':visible').each(function (rowIndex,row) {
                if(rowIndex < (rowspan -1)){
                    //隐藏相同列
                    $(row).find('td:eq('+columnIndex+'),th:eq('+columnIndex+')').hide();
                }else{
                    return false;
                }
            });
        }else if(rowspan < 0){
            //循环当前行前边的行次，过滤只显示可视行
            $(this).parent('td,th').parent('tr').prevAll('tr').filter(':visible').each(function (rowIndex,row) {
                if(rowIndex < (Math.abs(rowspan) -1)){
                    //隐藏相同列
                    $(row).find('td:eq('+columnIndex+'),th:eq('+columnIndex+')').hide();
                }else{
                    return false;
                }
            });
        }

        //设置合并行
        $(this).parent('td,th').attr('rowSpan',Math.abs(rowspan));
    },
        /**
         * 合并列
         * @param colspan 需合并的列数
         */
    'colspan' : function (colspan) {

        //当前td在行中的序号
            var columnIndex = $(this).parent('td').index();
            $(this).parent('td,th').show();
            if(colspan > 0){
                //循环后边所有列,过滤只显示可视列
                $(this).parent('td,th').nextAll('td,th').filter(':visible').each(function (colIndex, column) {
                    if(colIndex < (colspan -1 )){
                        $(column).hide();
                    }else {
                        return false;
                    }
                });
            }else if(colspan < 0){
                //循环前边所有列,过滤只显示可视列
                var prevObj = $(this).parent('td,th').prevAll('td:not(:has("input[name=ROWNO]")),th:not(:has("input[name=ROWNO]"))').filter(':visible');
                $.each(prevObj,function (colIndex, column) {
                    if(colIndex < (Math.abs(colspan) -1 )){
                        $(column).hide();
                    }else {
                        return false;
                    }
                })
                //前合并不足，再向后合并
                if(prevObj.length <= (Math.abs(colspan) - 1)){
                    $(this).parent('td,th').nextAll('td,th').filter(':visible').each(function (colIndex, column) {
                        if(colIndex < (Math.abs(colspan) - 1 - prevObj.length )){
                            $(column).hide();
                        }else {
                            return false;
                        }
                    });
                }
               /* $(this).parent('td,th').prevAll('td,th').filter(':visible').each(function (colIndex, column) {
                    if(colIndex < (Math.abs(colspan) -1 )){
                        $(column).hide();
                    }else {
                        return false;
                    }
                });*/
            }

        //设置合并列
        $(this).parent('td,th').attr('colSpan',Math.abs(colspan));
    }
    });

})(jQuery);